<?php	
    include_once(dirname(__FILE__). "/class.DB_Acces.php");
    include_once(dirname(__FILE__). "/business/class.ordre.php");
    include_once(dirname(__FILE__). "/../treatments/class.Log.php");

    class Order_Manager{

        private $DB_acces;
        private $userId;
        private $arborescence;

        public function __construct($userId, $arborescence){
                //--initialisation des attibuts
                $this->DB_acces = new DB_Acces();
                $this->userId = $userId;
                $this->arborescence = $arborescence;
        }
        
        public function getAllOrders(){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Tableau de retour
            $retour = array();

            //--Construction de la requete
            $sql = "SELECT ord.IdOrdre, ord.NomOrdre, ord.ImageOrdre ".
                    "FROM ".$this->DB_acces->getPrefixTables()."Ordre ord";

            //--Ex�cution
            $req = mysql_query($sql);	

            //--R�cup�ration et tri
            while($res = mysql_fetch_array($req, MYSQL_ASSOC)){
                if($res != null){
                    $retour[] = new Ordre(utf8_encode($res['IdOrdre']),
                                        utf8_encode($res['NomOrdre']),
                                        utf8_encode($res['ImageOrdre']));
                }
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();
            
            //--Initialise les administrateur des ordres
            foreach($retour as $ord){
                $ord->setIdAdminitstrateurs($this->getAdministrateurByOrders($ord->getId()));
            }
            
            if(!isset($retour)){
                $retour = "aucun_ordre";
            }
            //--Retour du tableau
            return $retour;
        }
        
        public function getOrderById($idOrdre){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Tableau de retour
            

            //--Construction de la requete
            $sql = "SELECT ord.IdOrdre, ord.NomOrdre, ord.ImageOrdre ".
                    "FROM ".$this->DB_acces->getPrefixTables()."Ordre ord ".
                    "WHERE ord.IdOrdre = ".$idOrdre." ";

            //--Ex�cution
            $req = mysql_query($sql);	

            //--R�cup�ration et tri
            while($res = mysql_fetch_array($req, MYSQL_ASSOC)){
                if($res != null){
                    $retour = new Ordre(utf8_encode($res['IdOrdre']),
                                        utf8_encode($res['NomOrdre']),
                                        utf8_encode($res['ImageOrdre']));
                }
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();
            
            //--Initialise les administrateur des ordres
            $retour->setIdAdminitstrateurs($this->getAdministrateurByOrders($retour->getId()));
            
            if(!isset($retour)){
                $retour = "aucun_ordre";
            }
            //--Retour du tableau
            return $retour;
        }
        
        public function getOrderByName($name){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Construction de la requete
            $sql = "SELECT ord.IdOrdre, ord.NomOrdre, ord.ImageOrdre ".
                    "FROM ".$this->DB_acces->getPrefixTables()."Ordre ord ".
                    "WHERE ord.NomOrdre = '".utf8_decode($name)."' ";
            
            //--Ex�cution
            $req = mysql_query($sql);	

            //--R�cup�ration et tri
            while($res = mysql_fetch_array($req, MYSQL_ASSOC)){
                if($res != null){
                    $retour = new Ordre(utf8_encode($res['IdOrdre']),
                                        utf8_encode($res['NomOrdre']),
                                        utf8_encode($res['ImageOrdre']));
                }
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();
            
            //--Initialise les administrateur des ordres
            $retour->setIdAdminitstrateurs($this->getAdministrateurByOrders($retour->getId()));
            
            if(!isset($retour)){
                $retour = "aucun_ordre";
            }
            //--Retour du tableau
            return $retour;
        }
        
        public function getAdministrateurByOrders($idOrdre){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Tableau de retour
            $retour = array();

            //--Construction de la requete
            $sql = "SELECT id.idUtilisateur ".
                    "FROM ".$this->DB_acces->getPrefixTables()."ParamProfilAdmin id ".
                    "WHERE id.idOrdre = ".$idOrdre." "; 
            //--Ex�cution
            $req = mysql_query($sql);	

            //--R�cup�ration et tri
            while($res = mysql_fetch_array($req, MYSQL_ASSOC)){
                if($res != null){
                    $retour[] = $res['idUtilisateur'];
                }
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();
            
            //--Retour du tableau
            return $retour;
        }
    
        public function setAdminToOrder($userId, $orderId){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Construction de la requete
            $sql = " INSERT INTO  identV2_ParamProfilAdmin (  IdParamProfilAdmin ,  IdUtilisateur ,  IdOrdre ) 
                    VALUES ('',  ".$userId.",  ".$orderId.")";

            //--Ex�cution
            $req = mysql_query($sql);
            if($req == '1'){
                $retour = "insertionOk";
                Log::ajoutLigneBDD($this->userId, "Ajout admin a ordre", $sql, $this->arborescence);
            }
            else {
                $retour = "insertionKo";
                Log::ajoutLigneBDD($this->userId, "Erreur Ajout admin a ordre", $sql, $this->arborescence);
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();

            return $retour;
        }
        
        public function unSetAdminToOrder($userId, $orderId){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Construction de la requete
            $sql = " DELETE FROM identV2_ParamProfilAdmin Where IdUtilisateur = ".$userId." AND IdOrdre = ".$orderId." ";
           
            //--Ex�cution
            $req = mysql_query($sql);
            if($req == '1'){
                $retour = "suppressionOk";
                Log::ajoutLigneBDD($this->userId, "Suppression admin a ordre", $sql, $this->arborescence);
            }
            else {
                $retour = "suppressionKo";
                Log::ajoutLigneBDD($this->userId, "Erreur Suppression admin a ordre", $sql, $this->arborescence);
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();

            return $retour;
        }
    
        public function unSetAllOrderAdmin($orderId){
            //--Connexion � la base
            $this->DB_acces->connexion();

            //--Construction de la requete
            $sql = " DELETE FROM identV2_ParamProfilAdmin Where IdOrdre = ".$orderId." ";
           
            //--Ex�cution
            $req = mysql_query($sql);
            if($req == '1'){
                $retour = "suppressionOk";
                Log::ajoutLigneBDD($this->userId, "Suppression tous admins ordre", $sql, $this->arborescence);
            }
            else {
                $retour = "suppressionKo";
                Log::ajoutLigneBDD($this->userId, "Erreur Suppression tous admins ordre", $sql, $this->arborescence);
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();

            return $retour;
        }
        
        public function addOrder($orderName, $picture){
            $this->DB_acces->connexion();
			
            $sql = "insert into ".$this->DB_acces->getPrefixTables()."Ordre ( NomOrdre,ImageOrdre) values ('".utf8_decode($orderName)."', '".utf8_decode($picture)."'); "; 
            
            //--Ex�cution
            $req = mysql_query($sql);
            if($req == '1'){
                $retour = "Ok";
                Log::ajoutLigneBDD($this->userId, "Ajout ordre", $sql, $this->arborescence);
            }
            else {
                $retour = "Ko";
                Log::ajoutLigneBDD($this->userId, "Erreur Ajout ordre", $sql, $this->arborescence);
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();

            return $retour;
        }
        
        public function updateOrder($orderId, $orderName, $picture){
            $this->DB_acces->connexion();
			
            $sql = "update ".$this->DB_acces->getPrefixTables()."Ordre set NomOrdre = '".utf8_decode($orderName)."', ".
                                                                            "ImageOrdre = '".utf8_decode($picture)."' ". 
                                                                            "where IdOrdre = ".$orderId.";"; 
            
            //--Ex�cution
            $req = mysql_query($sql);
            if($req == '1'){
                    $retour = "Ok";
                    Log::ajoutLigneBDD($this->userId, "Modification ordre", $sql, $this->arborescence);
            }
            else {
                $retour = "Ko";
                    Log::ajoutLigneBDD($this->userId, "Erreur Modification ordre", $sql, $this->arborescence);
            }

            //--Fermeture de la base
            $this->DB_acces->deconnexion();

            return $retour;
        }
        
        public function orderIsDeletable($order_id){
            $this->DB_acces->connexion();
            //--Vérifier que l'ordre ne contient pas de photos
            $sql = "SELECT count(*) as nbr_photos 
                    FROM identV2_Image
                    WHERE IdOrdre = ".$order_id.";";
            //--Ex�cution
            $req = mysql_query($sql);	
            $retour = 0;
            //--R�cup�ration et tri
            while($res = mysql_fetch_array($req, MYSQL_ASSOC)){
                if($res != null){
                    $retour = $res['nbr_photos'];
                }
            }
            if($retour > 0){
                return false;
            }
            else return true;
        }
        
        public function deleteOrder($orderId){
            $estpossible = $this->orderIsDeletable($orderId);
            if($estpossible){

                $this->DB_acces->connexion();

                $sql = "delete from ".$this->DB_acces->getPrefixTables()."Ordre where IdOrdre = ".$orderId.";"; 

                //--Ex�cution
                $req = mysql_query($sql);
                if($req == '1'){
                        $retour = "Ok";
                        Log::ajoutLigneBDD($this->userId, "Suppression ordre", $sql, $this->arborescence);
                }
                else {
                    $retour = "Ko";
                        Log::ajoutLigneBDD($this->userId, "Erreur Suppression ordre", $sql, $this->arborescence);
                }

                //--Fermeture de la base
                $this->DB_acces->deconnexion();

                $this->unSetAllOrderAdmin($orderId);
                
                return $retour;
            }
            else return "Ko";
        }
    }
    
